#1: Importar base de dados
import pandas as pd
tabela_clientes = pd.read_csv("telecom_users.csv")
#2: Visualizar a base de dados
tabela_clientes = tabela_clientes.drop("Unnamed: 0", axis =1) #exclui coluna Unnamed: 0
tabela_clientes = tabela_clientes.drop("IDCliente", axis =1) #exclui coluna IDCliente
display(tabela_clientes) #exibe a tabela formatada
display(tabela_clientes.columns) #mostra o nome de todas as colunas
| Genero | Aposentado | Casado | Dependentes | MesesComoCliente | ServicoTelefone | MultiplasLinhas | ServicoInternet | ServicoSegurancaOnline | ServicoBackupOnline | ... | ServicoSuporteTecnico | ServicoStreamingTV | ServicoFilmes | TipoContrato | FaturaDigital | FormaPagamento | ValorMensal | TotalGasto | Churn | Codigo | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Masculino | 0 | Sim | Sim | 72 | Sim | Sim | Nao | SemInternet | SemInternet | ... | SemInternet | SemInternet | SemInternet | 2 anos | Nao | CartaoCredito | 24.10 | 1734.65 | Nao | NaN |
| 1 | Feminino | 0 | Nao | Nao | 44 | Sim | Nao | Fibra | Nao | Sim | ... | Nao | Sim | Nao | Mensal | Sim | CartaoCredito | 88.15 | 3973.2 | Nao | NaN |
| 2 | Feminino | 1 | Sim | Nao | 38 | Sim | Sim | Fibra | Nao | Nao | ... | Nao | Nao | Nao | Mensal | Sim | DebitoAutomatico | 74.95 | 2869.85 | Sim | NaN |
| 3 | Masculino | 0 | Nao | Nao | 4 | Sim | Nao | DSL | Nao | Nao | ... | Nao | Nao | Sim | Mensal | Sim | BoletoEletronico | 55.90 | 238.5 | Nao | NaN |
| 4 | Masculino | 0 | Nao | Nao | 2 | Sim | Nao | DSL | Sim | Nao | ... | Nao | Nao | Nao | Mensal | Nao | BoletoEletronico | 53.45 | 119.5 | Nao | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 5981 | Masculino | 0 | Sim | Nao | 1 | Sim | Nao | Fibra | Sim | Nao | ... | Nao | Sim | Sim | Mensal | Sim | BoletoEletronico | 95.00 | 95 | Sim | NaN |
| 5982 | Feminino | 0 | Sim | Sim | 23 | Sim | Sim | DSL | Sim | Sim | ... | Sim | Sim | Sim | 2 anos | Sim | CartaoCredito | 91.10 | 2198.3 | Nao | NaN |
| 5983 | Masculino | 0 | Sim | Sim | 12 | Sim | Nao | Nao | SemInternet | SemInternet | ... | SemInternet | SemInternet | SemInternet | Mensal | Sim | BoletoEletronico | 21.15 | 306.05 | Nao | NaN |
| 5984 | Masculino | 1 | Nao | Nao | 12 | Sim | Sim | Fibra | Nao | Nao | ... | Nao | Sim | Sim | Mensal | Sim | BoletoEletronico | 99.45 | 1200.15 | Sim | NaN |
| 5985 | Masculino | 0 | Nao | Nao | 26 | Sim | Nao | Nao | SemInternet | SemInternet | ... | SemInternet | SemInternet | SemInternet | Anual | Nao | CartaoCredito | 19.80 | 457.3 | Nao | NaN |
5986 rows × 21 columns
Index(['Genero', 'Aposentado', 'Casado', 'Dependentes', 'MesesComoCliente',
'ServicoTelefone', 'MultiplasLinhas', 'ServicoInternet',
'ServicoSegurancaOnline', 'ServicoBackupOnline', 'ProtecaoEquipamento',
'ServicoSuporteTecnico', 'ServicoStreamingTV', 'ServicoFilmes',
'TipoContrato', 'FaturaDigital', 'FormaPagamento', 'ValorMensal',
'TotalGasto', 'Churn', 'Codigo'],
dtype='object')
#3: Tratar dados
#retirar valores vazios
tabela_clientes["TotalGasto"] = pd.to_numeric(tabela_clientes["TotalGasto"], errors="coerce")#transforma texto para numeros, erros transforma para campos vazios
print(tabela_clientes.info())#exibe informacoes da tabela, exibe quantidade de campos vazios
#problema de valores vazios
tabela_clientes = tabela_clientes.dropna(how="all", axis =1) #excluiu todas as colunas com valores vazios
tabela_clientes = tabela_clientes.dropna(how="any", axis =0)#excluiu linhas com pelomenos um valor vazio
<class 'pandas.core.frame.DataFrame'> RangeIndex: 5986 entries, 0 to 5985 Data columns (total 21 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Genero 5986 non-null object 1 Aposentado 5986 non-null int64 2 Casado 5986 non-null object 3 Dependentes 5985 non-null object 4 MesesComoCliente 5986 non-null int64 5 ServicoTelefone 5986 non-null object 6 MultiplasLinhas 5986 non-null object 7 ServicoInternet 5986 non-null object 8 ServicoSegurancaOnline 5986 non-null object 9 ServicoBackupOnline 5986 non-null object 10 ProtecaoEquipamento 5986 non-null object 11 ServicoSuporteTecnico 5986 non-null object 12 ServicoStreamingTV 5986 non-null object 13 ServicoFilmes 5986 non-null object 14 TipoContrato 5986 non-null object 15 FaturaDigital 5986 non-null object 16 FormaPagamento 5986 non-null object 17 ValorMensal 5986 non-null float64 18 TotalGasto 5976 non-null float64 19 Churn 5985 non-null object 20 Codigo 0 non-null float64 dtypes: float64(3), int64(2), object(16) memory usage: 982.2+ KB None
#4: Olhar a distribuicaso de "Churns"(cancelamentos)
display(tabela_clientes["Churn"].value_counts()) #exibe a quantidade de cancelamentos
display(tabela_clientes["Churn"].value_counts(normalize=True).map('{:.1%}'.format))#exibe a porcentagem de cancelamentos,com 1 casa decimal
#5: Analizar os possiveis motivos para os cancelamentos
#instalar plotly comando no anaconta pip install plotly
import plotly.express as px
#cria todos os graficos da tavela
for coluna in tabela_clientes:
grafico = px.histogram(tabela_clientes,x=coluna, color="Churn" )
grafico.show()
Nao 4387 Sim 1587 Name: Churn, dtype: int64
Nao 73.4% Sim 26.6% Name: Churn, dtype: object